package cn.tedu;
/**
 * 01 final最终的、不可改变的---单独应用率极低
 * 1 修饰变量，变量不能被改变
 * 2 修饰方法，方法不能被重写
 * 3 修饰类，类不能被继承
 *
 * 02 static final常量：应用率高
 * 1 必须声明同时初始化
 * 2 通过类名点来访问，不能被改变
 * 3 建议：常量名所有字母都大写，多个单词用_分隔
 * 4 编译期在编译时会将常量直接替换为具体的值，效率高
 * 5 何时用：数据永远不变，且经常使用
 *
 * 03 抽象方法：
 * 1 只有方法的定义，没有具体的实现（连大括号都没有）
 * 2 由abstract修饰
 *
 * 04 抽象类：
 * 1 有abstract修饰
 * 2 包含抽象方法的类必须是抽象类
 * 3 抽象类不能被实例化
 * 4 抽象类需要被继承
 * ①继承之后，要么重写所有的抽象方法---变不完整为完整
 * ② 继承之后，要么也声明为抽象类---一般不这么用
 * 5 抽象类的意义：
 * ① 封装共有的属性和行为
 * ② 为所有的派生类提供统一的类型
 * ③ 可以包含抽象方法，为派生类提供统一的入口（能点出来什么看引用的类型），
 * 同时强制派生类必须重写，相当于制定了一个标准
 *
 * 05 潜艇游戏第六天：
 * 1 设计窗口的宽和高为常量
 * 2 画窗口
 * 3 画对象
 * ① 想画对象需要获取对象的图片，每个对象都能获取图片
 * 意味着获取对象图片的行为为共有行为，所以设计在SeaObject超类中，
 * 每个对象获取图片的行为都是不一样的，所以设计为抽象方法
 * ---在SeaObject中设计getImage()方法获取对象的图片
 * ② 派生类中重写getImage()方法，获取不同对象对应的图片
 * ③ 画对象时，需要判断对象的状态，因为只有活着的对象才会画对象，
 * 每个对象都有状态，意味着对象的状态为共有属性，所以设计在SeaObject超类中，
 * 状态一般都设计为常量，同时设计state属性表示当前状态，
 * 状态有了，还需要判断状态，每个对象都能判断状态，意味着判断对象的状态为共有行为，
 * 所以设计在SeaObject超类中，每个对象判断状态的行为都是一样的，所以设计为普通方法，
 * --- 在SeaObject中设计isLive()方法判断是否是活着的，设计isDead()方法方法判断是否是死了的
 * ④ 对象图像，x、y坐标有了，就可以画了，每个对象都能画图片，意味着画图片的行为为共有行为，
 * 所以设计在SeaObject超类中，每个对象画图片的行为都是一样的，所以设计为普通方法。
 * --- 在SeaObject中设计paintImage()方法画图片，
 * ⑤画图片的行为做好之后，在窗口类World中调用即可
 * --- 准备对象数据
 * ---重写paint()方法：画海洋图，画对象
 *
 * 06 常见面试题：
 * 1 JDK、JRE、JVM的区别：
 * ① JDK：java开发工具包，是java的核心，包括：JRE+编译、运行等命令工具
 * ② JRE：java运行环境，是运行java程序所必须的环境的集合，包括：JVM+java系统类库
 * ③ JVM：java虚拟机，是java实现跨平台最核心的部分，能够运行java语言所开发的程序
 * 2 java的8种基本数据类型是什么？（简述java中的8种基本数据类型）
 * ① byte:字节型，用于存储整数的，占用1字节，范围-128到127
 * ② short:短整型，用于存储整数的，占用2个字节，范围-32768到32767
 * ③ int:最常用的整型，用于存储整数的，占用4个字节，范围-2^31到2^31-1
 * ④ long:长整型，用于存储较大的整数，占用8个字节，范围-2^63到2^63-1
 * ⑤ float:单精度浮点数，用于存储小数的，占用4个字节，不能表示精确的值
 * ⑥ double:双精度浮点数，最常用的存储小数的类型，占用8个字节，不能表示精确的值
 * ⑦ boolean:布尔型，存储true或false，占用1个字节
 * ⑧ char:字符型，采用Unicode字符编码格式，存储单个字符，占用2个字节
 * 3 switch可以作用于哪些数据类型上？
 * byte,short,int,char,String,枚举
 * 4 重写与重载的区别:
 * ① 重写：发生在父子类中，方法签名相同，方法体不同
 * ----用于在子类中修改父类中的方法，多态的体现
 * ② 重载:发生在同一类中，方法名相同，参数列表不同
 * ----方法名相同的完全不同的方法，多态的体现
 * 5 成员变量与局部变量与实例变量与静态变量的区别:
 * ① 实例变量与静态变量都属于成员变量
 * ② 实例变量：属于对象，在创建对象时，存储在内存堆中，
 * 创建多少个对象，则在内存堆中存在多少份，需要通过对象的引用来访问
 * ③ 静态变量：属于类，在类被加载时存储在内存方法区中，无论创建多少个对象，
 * 静态变量在内存中都只有一份，常常通过类名点来访问
 * ④ 局部变量在方法中，当方法被调用时，局部变量被分配内存空间，方法结束，局部变量被销毁
 * 6 创建类时的代码顺序：package->import->class
 * 7 final可以修饰成员变量也可以修饰局部变量
 * ① 修饰成员变量时，只能声明同时初始化或在构造方法中初始化，否则编译异常
 * ② 修饰局部变量时，只要在使用之前初始化就行，如果没有被使用，可以不赋值，不会有编译异常
 * 8 构造方法可以设计为private的，意味着只能在当前类中创建对象，在其他类中就不能创建对象了。
 * 9 重载的特殊形式：当子类继承父类后，重写父类中的方法，然后自己可以对重写的方法进行重载
 *
 *
 *
 * @author XingHaiYang
 * @date 2022/9/23 9:39
 */
public class OODay05Evensong {
}
